#ifndef LINKLIST_H
#define LINKLIST_H

// 链表节点的结构体定义
typedef struct ListNode {
    int data;
    struct ListNode *next;
} ListNode;

// 带头节点的链表结构体定义
typedef struct LinkList {
    int size;
    ListNode *head;
    ListNode *tail;
} LinkList;

/// 创建链表
/// \return 链表实例
LinkList createLinkedList();
/// 在链表头部添加元素
/// \param list 链表实例
/// \param data 要添加的元素
void addToListHead(LinkList *list, int data);
/// 在链表尾部添加元素
/// \param list 链表实例
/// \param data 要添加的元素
void addToListTail(LinkList *list, int data);
/// 从链表中删除元素
/// \param list 链表实例
/// \param data 要删除的元素
void removeFromList(LinkList *list, int data);
/// 获取链表中的元素
/// \param list 链表实例
/// \param data 要获取的元素的索引
/// \return 获取到的元素
ListNode* findInList(LinkList *list, int data);
/// 打印链表中的元素
/// \param list 链表实例
void printList(LinkList *list);
/// 销毁链表
/// \param list 链表实例
void destroyList(LinkList *list);

#endif